/****************************************************************
*
* www.payitforward.edu.vn
*
****************************************************************/
/****************************************************************
*
* PIC Training Course
*
****************************************************************/
/****************************************************************
*
*    Module        : read_sensor_main.c
*    Description  : Read sensor mma 8452 data and transmit data to computer using uart
*                         
*    Tool            : HI-TECH PIC
*    Chip            : 16F887
*     History       : 26/07/2012
*
*    Author        : Cu Xuan Duc
*    Notes          :
*
*
****************************************************************/
/****************************************************************
* IMPORT
****************************************************************/
#include <htc.h> 					
#include "i2c_mma8452.h"
#include "uart.h"
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_OFF);  //1st config. Word
__CONFIG(BOR4V_BOR21V); 			// 2st config. Word 
#define _XTAL_FREQ 	4000000 		// define crystal frequency
/****************************************************************
* EXTERN
****************************************************************/

/*none...*/

/*****************************************************************/

/*****************************************************************
GLOBAL VARIABLE
******************************************************************/
char x_acc_value,x_acc,y_acc,y_acc_value,z_acc,z_acc_value;
/*****************************************************************
* ROUTINES
******************************************************************/
/* config port*/
void system_init()
{
	ANSEL=0;
	ANSELH=0;
	TRISB = 0X00;					
	PORTB = 0XFF;
	i2c_init();
	uart_init();
}
//----------------------------------------------------------------
/*delay 2s*/
void delay2s()
{
	char i;
	for (i=0;i<20;i++)
		__delay_ms(100);
}
//----------------------------------------------------------------
/*convert value to number to display on computer using uart*/
void xuliso(char so)
{
	char i=0,j;
	int kq[10];
	while (so!=0)
	{	
		i++;
		kq[i]=so%10;
		so=so/10;
	}
	for (j=1;j<i+1;j++)
		uart_putc(kq[i-j+1]+0x30);
}   
//----------------------------------------------------------------
/****************************************************************
* MAIN
****************************************************************/
/* -- void main (void)    -----------------------------------------
*
* Description    : Configure port,read data from 3 register 0x01:OUT_X_MSB
					,0x02:OUT_Y_MSB,0x03:OUT_Z_MSB of MMA8452
*                    
* Parameters    : none
* Return        : don't care
* Notes        :
*/
void main(void)
{	
	
	system_init();
	uart_puts("hello");
	uart_puts("\n");
	standby_mode();
	sensor_write(0x0E,0x00);

	while(1)
	{
		active_mode();
		x_acc = sensor_read(0x01);
		y_acc = sensor_read(0x02);
		z_acc = sensor_read(0x03);
		uart_puts(" gia toc x:");
		if (x_acc<=128)		
			{
				x_acc_value= x_acc*2*10/128;	
				xuliso(x_acc_value);
			}	
		if(x_acc>128)	
			{
				x_acc_value=(256-x_acc)*2*10/128;
				uart_puts("-");
				xuliso(x_acc_value);			
			}
		uart_puts("m/s2 gia toc y:");
		if (y_acc<=128)		
			{
				y_acc_value= y_acc*2*10/128;	
				xuliso(y_acc_value);
			}	
		if(y_acc>128)	
			{
				y_acc_value=(256-y_acc)*2*10/128;
				uart_puts("-");
				xuliso(y_acc_value);			
			}
		uart_puts("m/s2 gia toc z:");
		if (z_acc<=128)		
			{
				z_acc_value= z_acc*2*10/128;	
				xuliso(z_acc_value);
			}	
		if(z_acc>128)	
			{
				z_acc_value=(256-z_acc)*2*10/128;
				uart_puts("-");
				xuliso(z_acc_value);			
			}
		uart_puts("m/s2");
		uart_puts("\n");
		PORTB=~x_acc;
		delay2s();
								
	}

}

/****************************************************************
 * END OF read_sensor_main.c
 ****************************************************************/